package com.swjd.service;

import com.swjd.domain.Comment;
import com.swjd.repository.CommentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.Optional;
import java.util.concurrent.TimeUnit;

@Service
@Transactional
public class ApiCommentService {
@Autowired
    private CommentRepository commentRepository;
@Autowired
private RedisTemplate redisTemplate;
/*
查询方法
 */
    public Comment findById(Integer id){
        //获取一个空间为comment_id的值
        Object o = redisTemplate.opsForValue().get("comment_" + id);
        //如果缓存中的comment_id有值
        if (o!=null){
            //取出缓存中的数据返回
            return (Comment) o;
        }else {
            //如果缓存中没有数据就查询
            Optional<Comment> byId = commentRepository.findById(id);
            if (byId.isPresent()){
            Comment comment = byId.get();
            //把数据存入redis缓存中 存入空间为comment_id 存入comment值 存1天
            redisTemplate.opsForValue().set("comment_"+id,comment,1, TimeUnit.DAYS);
            return comment;
            }
        }
        return null;

    }
    /*
    更新方法
     */
    public Integer update(Comment comment){
        //执行更新方法获取返回成功数
        int i = commentRepository.updateComment(comment.getAuthor(), comment.getId());
        //把comment存入comment_id中一天
        redisTemplate.opsForValue().set("comment_"+comment.getId(),comment,1,TimeUnit.DAYS);
        return i;
    }

    /*
    删除方法
     */
    public void delete(Integer id){
        commentRepository.deleteById(id);
        redisTemplate.delete("comment_"+id);
    }

}
